package com.itboye.eweilisten.util;

import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
import android.util.Log;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

/**
 * 下载播放的音频
 */
public class MyDownLoaderTask extends AsyncTask<Void, Integer, Long> {
    private final String TAG = "DownLoaderTask";
    private URL mUrl;
    private File mFile;
    private int mProgress = 0;
    private ProgressReportingOutputStream mOutputStream;
    private Context context;

    String name;//文件名

    int count,count01;

    ProgressDialog loadingDialog;


    /**
     *
     * @param context
     * @param loadingDialog
     * @param url
     * @param out        路径
     * @param name       保存的名字
     * @param count
     * @param count01    count01  多个下载，当最后一个count和长度count01相等时  结束掉加载框
     */
    public MyDownLoaderTask(Context context,ProgressDialog loadingDialog,String out,String url,String name,int count,int count01){
        super();
        this.name=name;
        this.count=count;
        this.count01=count01;
        this.context = context;
        this.loadingDialog=loadingDialog;
        try {
            mUrl = new URL(url);
            //	String fileName = new File(mUrl.getFile()).getName();
            String fileName =name;
            mFile = new File(out, fileName);
            //out=/mnt/sdcard/mythroad/, name=zip?t=book&id=8.zip,mUrl.getFile()=/index.php/file/zip?t=book&id=8.zip
            Log.d(TAG, "out="+out+", name="+fileName+",mUrl.getFile()="+mUrl.getFile());
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        //super.onPreExecute();
    }

    @Override
    protected Long doInBackground(Void... params) {
        // TODO Auto-generated method stub
        int jindu=0;
        for(int i=0;i<=100;i++){
            System.out.println("哒哒哒："+i);
            jindu=i;
        }
        if (jindu==100){
            return download();
        }
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        // TODO Auto-generated method stub
        // 判断是否被取消
        if(isCancelled()) return;
        //super.onProgressUpdate(values);
        System.out.println("下载进度"+count+"/"+count01);
        if(loadingDialog==null)
            return;

        loadingDialog.setProgress(count);
    }

    @Override
    protected void onPostExecute(Long result) {
        // TODO Auto-generated method stub
        //super.onPostExecute(result);
        if(loadingDialog!=null&&loadingDialog.isShowing()){
            if (count+1==count01){
                loadingDialog.dismiss();
                Intent intent=new Intent("down_ok");
                context.sendBroadcast(intent);
            }
        }
        if(isCancelled())
            return;

    }

    private long download(){
        URLConnection connection = null;
        int bytesCopied = 0;
        try {
            connection = mUrl.openConnection();
            int length = connection.getContentLength();

            if(mFile.exists()&&length == mFile.length()){
                Log.d(TAG, "file "+mFile.getName()+" already exits!!");
                return 0l;
            }
            mOutputStream = new ProgressReportingOutputStream(mFile);
            publishProgress(0,length);
            bytesCopied =copy(connection.getInputStream(),mOutputStream);
            if(bytesCopied!=length&&length!=-1){
                Log.e(TAG, "Download incomplete bytesCopied="+bytesCopied+", length"+length);
            }
            mOutputStream.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return bytesCopied;
    }
    private int copy(InputStream input, OutputStream output){
        byte[] buffer = new byte[1024*8];
        BufferedInputStream in = new BufferedInputStream(input, 1024*8);
        BufferedOutputStream out  = new BufferedOutputStream(output, 1024*8);
        int count =0,n=0;
        try {
            while((n=in.read(buffer, 0, 1024*8))!=-1){
                out.write(buffer, 0, n);
                count+=n;
            }
            out.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            try {
                out.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            try {
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return count;
    }
    private final class ProgressReportingOutputStream extends FileOutputStream {

        public ProgressReportingOutputStream(File file)
                throws FileNotFoundException {
            super(file);
            // TODO Auto-generated constructor stub
        }

        @Override
        public void write(byte[] buffer, int byteOffset, int byteCount)
                throws IOException {
            // TODO Auto-generated method stub
            super.write(buffer, byteOffset, byteCount);
            mProgress += byteCount;
            publishProgress(mProgress);
        }
    }

//   public boolean isCompleteDownload(){
//        if (count==count01){
//           return true;
//        }
//
//        return false;
//   }


}
